When first developed a computer program often contains defects, commonly termed bugs. Software developers attempt to remove bugs in their computer programs prior to a commercial release. However, some bugs are difficult to find, and are not found and corrected for some time. To assist in debugging software, a software debugging tool—commonly called a debugger—is used. The debugger is useful to track the progress of execution of instructions and to see the effects of each instruction on registers, the stack and memory. Debugging tools often allow the user to control the execution process in a step by step (instruction by instruction) manner.
Also when a computer program encounters a serious error—often termed a crash—a core dump of the instruction queue, registers and the stack can be performed for debugging purposes.
Typically computer programs are compiled to run on a particular computer architecture by use of an instruction set for the particular architecture. Common computer architectures are Hewlett-Packard's PA-RISC, Intel's IA-64 and x86, and the Apple, IBM and Motorola Alliance's PowerPC.
However a computer program can be formed from a first group of instructions of a first architecture instruction set and a second group of instructions of a second architecture instruction set, where the second group of instructions are emulated by use of an emulator. Such computer programs are termed mixed mode applications. Current debuggers are not intended to debug mixed mode applications. Since the second group of instructions are not for the same architecture current debuggers may not understand or may misinterpret the second group of instructions.
This creates problems when it is desired to debug a mixed mode application.